	;; Punto 1 del TP2 de Organizacion de computadoras.
	;;
	;; codigo original:
	;; A=4
	;; B=5
	;; C=7
	;; D=3
	;; X=B+C
	;; Y=D-C
	;; Z=(((((A+C)-B)*C)-X)/Y)
	;; A=X*Y*3
	;;
	;; traduccion:
	;; rA <- 4
	;; rB <- 5
	;; rC <- 7
	;; rD <- 3
	;; rX <- rB + rC
	;; rY <- rD - rC
	;; rINT <- rA + rC
	;; rINT <- rINT - rB
	;; rINT <- rINT * rC
	;; rINT <- rINT - rX
	;; rINT <- rINT / rY
	;; rZ <- (double)rINT
	;; rA <- rX * rY
	;; rA <- rA * 3

	.text
	.global main

main:
	;; Segun el enunciado, los valores de las variables
	;; estan en memoria. Guardo, entonces, esos valores:
	addi	r6,r0,#4
	sw	0(r14),r6	; guardo el #4 en el stack
	addi	r6,r0,#5
	sw	4(r14),r6	; guardo el #5 en el stack
	addi	r6,r0,#7
	sw	8(r14),r6	; guardo el #7 en el stack
	addi	r6,r0,#3
	sw	12(r14),r6	; guardo el #7 en el stack

	;; Ahora levanto los valores en los registros que
	;; mapean las variables del enunciado:
	lw r1,0(r14)		; r1 <=> A
	lw r2,4(r14)		; r2 <=> B
	lw r3,8(r14)		; r3 <=> C
	lw r4,12(r14)		; r4 <=> D
	add r5,r2,r3		; r5 <=> X
	sub r6,r4,r3		; r6 <=> Y

	;; Calculo del valor entero de Z.
	add r7,r1,r3		; r7 <=> NT
	sub r7,r7,r2
	mult r7,r7,r3
	sub r7,r7,r5
	div  r7,r7,r6
 
	;; Convierto el resultado entero a un double en Z.
	movi2fp f1,r7		; Paso el numero entero a
				; un registro de punto flotante.
	cvti2d	f2,f1		; f2 <=> Z

	;; Calculo el nuevo valor de A.
	mult r1,r5,r6		; A <- X * Y
	lw r2,12(r14)		; r2 <- 3 (pierdo B)
	mult r1,r1,r2

	;; Fin del programa.
	trap 0
